Skip to content

chore(release): merge release/v1.2.0 into main for 1.2.0 - #248

Merged
ModifAmorphic merged 7 commits into
mainfrom
release/v1.2.0
Aug 29, 2026
Merged

chore(release): merge release/v1.2.0 into main for 1.2.0#248
ModifAmorphic merged 7 commits into
mainfrom
release/v1.2.0

Conversation

@ModifAmorphic

@ModifAmorphic ModifAmorphic commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Issues addressed

Additional changes

  • Isolates the Linux NXM unregister test from the real managed handler directory.

ModifAmorphic and others added 7 commits August 25, 2026 16:15
…ival fix (#241)

First PR of #238. Adds the universal correction surface for a mod
container's import details, the derived version-unknown row state it
resolves, and fixes #240.

## Edit import details

- `IModRepository.EditImportDetails`: one manifest-level primitive for
editing a container's name, source association, and release tag.
Enforces the grounding rules at the data layer: a container is
download-grounded when any version carries a FileId or a
RemoteUploadedAt (the timestamp covers mods downloaded before FileId
persistence existed), and a grounded container refuses every edit,
including name-only. The mod id lock, the duplicate-identity guard, the
tag-collision guard, and the explicit `removeOlderVersions` confirm flag
(typed `RemovalConfirmationRequiredException` for programmatic recovery)
all live here.
- The edit surface is the import card's edit mode, rendered as an in-row
band on the edited row (batch imports keep the top card). Same fields
and shared `ImportSourceValidator` as the per-item import form; policy
picker hidden; Save applies the primitive; a multi-version identity
change swaps to an inline removal confirm. The band targets the
container id, re-attaches across mid-edit reloads, anchors the editing
row against reorder (grip, move buttons, drag), auto-closes when a
download morphs the row, and scrolls into view on open.
- Name editing is Untracked-only (a Nexus mod's name comes from Nexus;
the name-sync owns it) and renders read-only rather than disabled so the
name stays legible.
- Entry: a pencil action in the shared row action strip between the
source badge and the Enabled checkbox, hidden with its layout slot
reserved on non-editable rows (linked, download-morphed, downloaded).

## Version-unknown state

- "Nexus, version unknown" is a derived state (a NexusSource container
whose resolved latest version carries an empty tag; no storage change).
The update action enables with unknown-specific tooltips, Premium clicks
enqueue a resolution install with an empty expected version that passes
the queue's dequeue-time revalidation, the updates-only filter keeps
unknown rows, the pin dropdown suppresses, and the automatic-update
batch excludes them (manual click only).

## Latest-arrival fix (fixes #240)

- `WithLatestMarked` ranks IsLatest by the most recent arrival: a manual
import (no remote facts) as the newest arrival is latest; otherwise the
newest downloaded version by remote publish date wins. A download
arriving over a manually imported container now correctly takes over,
while a deliberate old-file download still cannot displace a newer one.
- The startup prune additionally keeps each referenced container's
current-latest version folder, so a downloaded update is no longer
reclaimed as unreferenced on the next restart (also covers pinned
entries, whose newest version was previously prunable).

## Supporting changes

- The mod-list toolbar (search, filter toggles, density selector,
check-now) disables while the import card is active in either mode, so
the row being edited can never be filtered out from under its open band.
Row-level controls stay live.
- Docs updated throughout (AGENTS.md, docs/reference/mods.md, ui.md,
profiles.md, architecture notes).
- Full suite green at 2284 tests (Mods 225, UI 1108 among others).
## Summary
- Parse compatible line-format mod lists and reconcile their entries
against the active profile and Curator library.
- Add focused reorder-only and reorder-and-import workflows with
virtualized review, known mod facts, sibling-folder imports, Nexus
identification, capability gating, and explicit skip controls.
- Apply membership before ordering, route Premium acquisitions through
the shared download queue, and converge completed downloads to their
source-list positions.
- Match Nexus website search behavior with one anonymous v2 request,
exact ID verification, safe GraphQL escaping, and explicit candidate
acceptance.
- Add responsive, localized, and accessible review surfaces plus
comprehensive planner, workflow, search, placement, and XAML coverage.
- Isolate the Linux NXM unregister test from the real managed handler
directory.
- Update architecture orientation and library reference documentation
for the shipped contracts.

## Validation
- `dotnet build src/modificus-curator.sln --configuration Release` (0
warnings)
- `dotnet test src/modificus-curator.sln --configuration Release` (2,443
passed)
- `dotnet format src/modificus-curator.sln --verify-no-changes`
- `git diff --check origin/release/v1.2.0...HEAD`

Closes #238
## Summary

- display Detailed-row Nexus thumbnails in responsive 16:9 frames
- fit complete source images and increase decode sizing for 2x displays
- add regression coverage and synchronize the UI architecture and
reference docs

## Validation

- `dotnet build src/modificus-curator.sln --configuration Release`
- `dotnet test src/modificus-curator.sln --configuration Release` (2,445
passed)
- `dotnet format src/modificus-curator.sln --verify-no-changes`
- operator visual verification

Fixes #243
## Summary

- add a Clone profile action for the active persisted profile, with
immediate activation, existing unsaved-change resolution, and the
Darktide-running gate
- copy the complete persisted profile through a focused
`IProfileCloner`, using stable numbered copy families while keeping
repository mod files shared and the new staged tree empty
- preserve intentional DMF-free setups by keeping clones out of the
blank-profile creation prompt
- add backend, UI, DI, localization, naming, and XAML coverage and
synchronize current-system documentation

## Validation

- `dotnet build src/modificus-curator.sln --configuration Release` (0
warnings, 0 errors)
- `dotnet test src/modificus-curator.sln --configuration Release` (2,471
passed)
- `dotnet format src/modificus-curator.sln --verify-no-changes`
- `git diff --check release/v1.2.0...HEAD`
- independent code review approved
- independent QA passed
- operator live verification

Closes #245
## Summary

- use Nexus relevance ordering so older exact-title mods are not
excluded by capped newest-first results
- rank normalized exact matches ahead of non-exact candidates for
automatic and manual load-order searches while preserving the existing
selection safeguards
- add Scoreboard mod 22 regression coverage and update the Nexus and UI
references

## Validation

- `dotnet build src/modificus-curator.sln --configuration Release`
- `dotnet test src/modificus-curator.sln --configuration Release` (2,474
passed)
- `dotnet format src/modificus-curator.sln --verify-no-changes`
- independent code review approved and QA passed
@ModifAmorphic
ModifAmorphic merged commit 22d90e9 into main Aug 29, 2026
4 checks passed
@ModifAmorphic
ModifAmorphic deleted the release/v1.2.0 branch August 29, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant